Sistema de Nombrado en Java (JNDI) [Parte I]

En lugar de obtener un s�lo objeto, como con Context.lookup(), podemos listar un contexto completo usando una sola operaci�n. Hay dos m�todos para listar un contexto: uno que devuelve las uniones y otro que s�lo devuelve las parejas de nombres de clases nombre-a-objeto.

.�El M�todo Context.List()

Context.list() devuelve una enumeraci�n de NameClassPair.

Cada NameClassPair consiste en el nombre del objeto y el nombre de la clase. El siguiente fragmento de c�digo lista los contenidos del directorio "awt" (es decir, los ficheros encontrados en el directorio "awt").�

NamingEnumeration list = ctx.list("awt");

while (list.hasMore()) {
    NameClassPair nc = (NameClassPair)list.next();
    System.out.println(nc);
}

El ejecutar este ejemplo obtendremos la siguiente salida.

# java List
accessibility: javax.naming.Context
color: javax.naming.Context
datatransfer: javax.naming.Context
dnd: javax.naming.Context
event: javax.naming.Context
font: javax.naming.Context
geom: javax.naming.Context
im: javax.naming.Context
image: javax.naming.Context
peer: javax.naming.Context
print: javax.naming.Context
swing: javax.naming.Context

.�El M�todo Context.listBindings()

Context.listBindings() devuelve una enumeraci�n de Binding.

Binding es una subclase de� NameClassPair.

Una binding (uni�n) no s�lo contiene el nombre del objeto y el nombre de su clase, tambi�n contiene el propio objeto. El siguiente c�digo enumera el contexto "awt", imprimiendo cada nombre de uni�n y el objeto.

NamingEnumeration bindings = ctx.listBindings("awt");

while (bindings.hasMore()) {
    Binding bd = (Binding)bindings.next();
    System.out.println(bd.getName() + ": " + bd.getObject());
}

Al ejecutar este ejemplo obtendremos una salida como esta.

# java ListBindings
accessibility: com.sun.jndi.fscontext.RefFSContext@1dacd52e
color: com.sun.jndi.fscontext.RefFSContext@1dacd551
datatransfer: com.sun.jndi.fscontext.RefFSContext@1dacd584
dnd: com.sun.jndi.fscontext.RefFSContext@1dacd5b6
event: com.sun.jndi.fscontext.RefFSContext@1dacd5e8
font: com.sun.jndi.fscontext.RefFSContext@1dacd61b
geom: com.sun.jndi.fscontext.RefFSContext@1dacd64d
im: com.sun.jndi.fscontext.RefFSContext@1dacd62a
image: com.sun.jndi.fscontext.RefFSContext@1dacd65c
peer: com.sun.jndi.fscontext.RefFSContext@1dacd68f
print: com.sun.jndi.fscontext.RefFSContext@1dacd6c1
swing: com.sun.jndi.fscontext.RefFSContext@1dacd6f3

.�Terminando una NamingEnumeration

Una NamingEnumeration puede terminarse de una de tres formas: naturalmente, expl�citamente o inexperadamente.

  • Cuando un NamingEnumeration.hasMore() devuelve false, la enumeraci�n se ha completado efectivamente.
  • Podemos terminar una enumeraci�n expl�citamente antes de que se haya completado llamando a� NamingEnumeration.close().

    Haciendo esto proporcionamos un aviso a la implementaci�n subyacente para que libere cualquier recurso asociado con la enumeraci�n.

  • Si hasMore() o next() lanzan una NamingException, la enumeraci�n se termina de forma efectiva.

Sin importar el modo en que se ha terminado una enumeraci�n, una vez terminada no se puede volver a usar. Llamar a un m�todo sobre una enumeraci�n terminada nos dar� resultados indefinidos.

.��Por qu� dos m�todos de listado diferentes?

list() se ha pensado para una aplicaci�n estilo navegador que s�lo quiere nombrar los nombres de los objetos de un contexto. Por ejemplo, un navegador podria listar los nombres de un contexto y esperar a que el usuario seleccione uno o unos pocos de los nombres mostrados para realizar operaciones futuras. Dichas aplicaciones normalmente no necesitan acceder a todos los objetos de un contexto.

listBindings() se ha pensado para aplicaciones que necesitan realizar operaciones en masa sobre los objetos de un contexto. Por ejemplo, una aplicaci�n de backup podr�a necesitar realizar operaciones de "estado de fichero" sobre todos los ficheros de un directorio. O un programa administrador de impresoras podr�a querer rearrancar todas las impresoras de un edificio. Para realizar dichas operaciones, estas aplicaciones necesitan obtener todos los objetos unidos en el contexto. Por eso es mucho m�s expeditivo devolver los objetos como parte de la enumeraci�n.

Qu� aplicaci�n puede usar list() o la potencialmente m�s costosa listBindings(), depende del tipo de informaci�n que se necesite.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
SIGUIENTE ARTÍCULO